package org.shj.springcloud.movie;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;

/**
 * 
 * 只要 Hytrix 在项目的classpath下， Feign就会自动包装Hytrix，如果需要禁用自动包装 Hytrix, 有如下两种方法：
 * 1. 局部禁用。增加 FeignDisableHytrixConf 类，需要加上 @Configuration 的注解, 然后加上 UserFeignClient 中的关于禁用 Hytrix 的注解
 * 2. 全局禁用。在 application.properties 里加上 feign.hytrix.enabled=false
 * 
 * 某些场景下，Feign或Ribbon整合Hystrix后，会出现首次调用失败的问题。原因分析： Hystrix默认的超时时间是1秒，如果在1秒内得不到响应，就会进入fallback逻辑。
 * 由于Spring的懒加载机制，首次请求往往会比较慢，因此在某些机器（特别是配置低的机器）上，首次请求需要的时间可能就会大于1秒。 解决方案：
 * 1. 延长Hystrix的超时时间。 hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=5000
 * 2. 禁用 Hystrix 的超时。hystrix.command.default.execution.timeout.enabled=false
 * 3. 对于Feign，还可为Feign禁用Hystrix。   feign.hystrix.enabled=false
 * 
 * @author huangjian
 *
 */
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableCircuitBreaker
public class MovieFeignhystrixApplication {

	public static void main(String[] args) {
        SpringApplication.run(MovieFeignhystrixApplication.class, args);
    }
	
}
